home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet internetowy / Rozne / HTTrack 3.40-2 / httrack-3.40-2.exe / {app} / src / htscore.h < prev    next >
C/C++ Source or Header  |  2005-08-13  |  15KB  |  447 lines

  1. /* ------------------------------------------------------------ */
  2. /*
  3. HTTrack Website Copier, Offline Browser for Windows and Unix
  4. Copyright (C) Xavier Roche and other contributors
  5.  
  6. This program is free software; you can redistribute it and/or
  7. modify it under the terms of the GNU General Public License
  8. as published by the Free Software Foundation; either version 2
  9. of the License, or any later version.
  10.  
  11. This program is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. GNU General Public License for more details.
  15.  
  16. You should have received a copy of the GNU General Public License
  17. along with this program; if not, write to the Free Software
  18. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  19.  
  20.  
  21. Important notes:
  22.  
  23. - We hereby ask people using this source NOT to use it in purpose of grabbing
  24. emails addresses, or collecting any other private information on persons.
  25. This would disgrace our work, and spoil the many hours we spent on it.
  26.  
  27.  
  28. Please visit our Website: http://www.httrack.com
  29. */
  30.  
  31.  
  32. /* ------------------------------------------------------------ */
  33. /* File: Main file .h                                           */
  34. /* Author: Xavier Roche                                         */
  35. /* ------------------------------------------------------------ */
  36.  
  37. // Fichier librairie .h
  38. #ifndef HTTRACK_DEFH
  39. #define HTTRACK_DEFH
  40.  
  41.  
  42. #include "htsglobal.h"
  43.  
  44. /* specific definitions */
  45. #include "htsbase.h"
  46. // Includes & dΘfinitions
  47. #ifdef HAVE_SYS_TYPES_H
  48. #include <sys/types.h>
  49. #endif
  50. #ifdef HAVE_SYS_STAT_H
  51. #include <sys/stat.h>
  52. #endif
  53. #ifdef _WIN32
  54. #ifndef  _WIN32_WCE
  55. #include <conio.h>
  56. #endif
  57. #ifndef  _WIN32_WCE
  58. #include <signal.h>
  59. #include <direct.h>
  60. #else
  61. #ifndef HTS_CECOMPAT
  62. #include "signal.h"
  63. #endif
  64. #endif
  65. #else
  66. #include <signal.h>
  67. #ifdef HAVE_UNISTD_H
  68. #include <unistd.h>
  69. #endif
  70. #endif
  71. /* END specific definitions */
  72.  
  73.  
  74. // Include htslib.h for all types
  75. #include "htslib.h"
  76.  
  77. #include "htsopt.h"
  78.  
  79. // structure d'un lien
  80. typedef struct lien_url {
  81.   char firstblock;      // flag 1=premier malloc 
  82.   char link_import;     // lien importΘ α la suite d'un moved - ne pas appliquer les rΦgles classiques up/down
  83.   int depth;            // profondeur autorisΘe lien ; >0 forte 0=faible
  84.   int pass2;            // traiter aprΦs les autres, seconde passe. si == -1, lien traitΘ en background
  85.   int premier;          // pointeur sur le premier lien qui a donnΘ lieu aux autres liens du domaine
  86.   int precedent;        // pointeur sur le lien qui a donnΘ lieu α ce lien prΘcis
  87.   //int moved;          // pointeur sur moved
  88.   int retry;            // nombre de retry restants
  89.   int testmode;         // mode test uniquement, envoyer juste un head!
  90.   char* adr;            // adresse
  91.   char* fil;            // nom du fichier distant
  92.   char* sav;            // nom α sauver sur disque (avec chemin Θventuel)
  93.   char* cod;            // chemin codebase Θventuel si classe java
  94.   char* former_adr;     // adresse initiale (avant Θventuel moved), peut Ωtre nulle
  95.   char* former_fil;     // nom du fichier distant initial (avant Θventuel moved), peut Ωtre nul
  96.   // pour optimisation:
  97.   int hash_next[3];     // prochain lien avec mΩme valeur hash
  98. } lien_url;
  99.  
  100. // chargement de fichiers en 'arriΦre plan'
  101. typedef struct lien_back {
  102. #if DEBUG_CHECKINT
  103.   char magic;
  104. #endif
  105.   char url_adr[HTS_URLMAXSIZE*2];     // adresse
  106.   char url_fil[HTS_URLMAXSIZE*2];     // nom du fichier distant
  107.   char url_sav[HTS_URLMAXSIZE*2];     // nom α sauver sur disque (avec chemin Θventuel)
  108.   char referer_adr[HTS_URLMAXSIZE*2]; // adresse host page referer
  109.   char referer_fil[HTS_URLMAXSIZE*2]; // fichier page referer
  110.   char location_buffer[HTS_URLMAXSIZE*2];  // "location" en cas de "moved" (302,..)
  111.   char* tmpfile;                           // nom α sauver temporairement (compressΘ)
  112.   char tmpfile_buffer[HTS_URLMAXSIZE*2];   // buffer pour le nom α sauver temporairement
  113.   char send_too[1024];    // donnΘes α envoyer en mΩme temps que le header
  114.   int status;             // status (-1=non utilisΘ, 0: prΩt, >0: opΘration en cours)
  115.   int locked;             // locked (to be used soon)
  116.   int testmode;           // mode de test
  117.   int timeout;            // gΘrer des timeouts? (!=0  : nombre de secondes)
  118.   TStamp timeout_refresh; // si oui, time refresh
  119.   int rateout;            // timeout refresh? (!=0 : taux minimum tolΘrΘ en octets/s)
  120.   TStamp rateout_time;    // si oui, date de dΘpart
  121.   LLint maxfile_nonhtml;  // taille max d'un fichier non html
  122.   LLint maxfile_html;     // idem pour un ficheir html
  123.   htsblk r;               // structure htsblk de chaque objet en background 
  124.   int is_update;          // mode update
  125.   int head_request;       // requΦte HEAD?
  126.   LLint range_req_size;   // range utilisΘ
  127.   TStamp ka_time_start;   // refresh time for KA 
  128.   //
  129.   int http11;             // L'en tΩte doit Ωtre signΘ HTTP/1.1 et non HTTP/1.0
  130.   int is_chunk;           // chunk?
  131.   char* chunk_adr;        // adresse chunk en cours de chargement
  132.   LLint chunk_size;       // taille chunk en cours de chargement
  133.   LLint chunk_blocksize;  // taille data declaree par le chunk
  134.   LLint compressed_size;  // taille compressΘs (stats uniquement)
  135.   //
  136.   int* pass2_ptr;         // pointeur sur liens[ptr]->pass2
  137.   //
  138.   char info[256];         // Θventuel status pour le ftp
  139.   int stop_ftp;           // flag stop pour ftp
  140.   int finalized;          // finalized (optim memory)
  141. #if DEBUG_CHECKINT
  142.   char magic2;
  143. #endif
  144. } lien_back;
  145.  
  146. typedef struct struct_back {
  147.   lien_back* lnk;
  148.   int count;
  149.   void* ready;
  150. } struct_back;
  151.  
  152. typedef struct cache_back_zip_entry cache_back_zip_entry;
  153.  
  154. // cache
  155. typedef struct cache_back {
  156.   int version;        // 0 ou 1
  157.   /* */
  158.   int type;
  159.   int ro;
  160.   FILE *dat,*ndx,*olddat;
  161.   char *use;      // liste des adr+fil
  162.   FILE *lst;      // liste des fichiers pour la "purge"
  163.   FILE *txt;      // liste des fichiers (info)
  164.   char lastmodified[256];
  165.   // HASH
  166.   void* hashtable;
  167.   // HASH for tests (naming subsystem)
  168.   void* cached_tests;
  169.   // fichiers log optionnels
  170.   FILE* log;
  171.   FILE* errlog;
  172.   // variables
  173.   int ptr_ant;      // pointeur pour anticiper
  174.   int ptr_last;     // pointeur pour anticiper
  175.   //
  176.   void* zipInput;
  177.   void* zipOutput;
  178.   cache_back_zip_entry* zipEntries;
  179.   int zipEntriesOffs;
  180.   int zipEntriesCapa;
  181. } cache_back;
  182.  
  183. typedef struct hash_struct {
  184.   lien_url** liens;                     // pointeur sur liens
  185.   int max_lien;                         // indice le plus grand rencontrΘ
  186.   int hash[3][HTS_HASH_SIZE];           // tables pour sav/adr-fil/former_adr-former_fil
  187. } hash_struct;
  188.  
  189. typedef struct filecreate_params {
  190.   FILE* lst;
  191.   char path[HTS_URLMAXSIZE*2];
  192. } filecreate_params;
  193.  
  194. /* Library internal definictions */
  195. #ifdef HTS_INTERNAL_BYTECODE
  196.  
  197. static int cache_writable(cache_back* cache) {
  198.   return (cache != NULL && ( cache->dat != NULL || cache->zipOutput != NULL ) );
  199. }
  200.  
  201. static int cache_readable(cache_back* cache) {
  202.   return (cache != NULL && ( cache->olddat != NULL || cache->zipInput != NULL ) );
  203. }
  204.  
  205. #endif
  206.  
  207. // Fonctions
  208.  
  209. // INCLUDES .H PARTIES DE CODE HTTRACK
  210.  
  211. // routine main
  212. #include "htscoremain.h"
  213.  
  214. // divers outils pour httrack.c
  215. #include "htstools.h"
  216.  
  217. // aide pour la version en ligne de commande
  218. #include "htshelp.h"
  219.  
  220. // gΘnΘration du nom de fichier α sauver
  221. #include "htsname.h"
  222.  
  223. // gestion ftp
  224. #include "htsftp.h"
  225.  
  226. // routine parser java
  227. #include "htsjava.h"
  228.  
  229. // gestion interception d'URL
  230. #include "htscatchurl.h"
  231.  
  232. // gestion robots.txt
  233. #include "htsrobots.h"
  234.  
  235. // routines d'acceptation de liens
  236. #include "htswizard.h"
  237.  
  238. // routines de regexp
  239. #include "htsfilters.h"
  240.  
  241. // gestion backing
  242. #include "htsback.h"
  243.  
  244. // gestion cache
  245. #include "htscache.h"
  246.  
  247. // gestion hashage
  248. #include "htshash.h"
  249. #include "htsinthash.h"
  250.  
  251. // gestion rΘentrance
  252. #include "htsnostatic.h"
  253.  
  254. // infos console
  255. #if HTS_ANALYSTE_CONSOLE
  256. #include "httrack.h"
  257. #endif
  258.  
  259. #include "htsdefines.h"
  260.  
  261. #include "hts-indextmpl.h"
  262.  
  263. // INCLUDES .H PARTIES DE CODE HTTRACK
  264.  
  265. //
  266.  
  267. /*
  268. typedef void  (* t_hts_htmlcheck_init)(void);
  269. typedef void  (* t_hts_htmlcheck_uninit)(void);
  270. typedef int   (* t_hts_htmlcheck_start)(httrackp* opt);
  271. typedef int   (* t_hts_htmlcheck_end)(void);
  272. typedef int   (* t_hts_htmlcheck_chopt)(httrackp* opt);
  273. typedef int   (* t_hts_htmlcheck_process)(char** html,int* len,char* url_adresse,char* url_fichier);
  274. typedef int   (* t_hts_htmlcheck)(char* html,int len,char* url_adresse,char* url_fichier);
  275. typedef char* (* t_hts_htmlcheck_query)(char* question);
  276. typedef char* (* t_hts_htmlcheck_query2)(char* question);
  277. typedef char* (* t_hts_htmlcheck_query3)(char* question);
  278. typedef int   (* t_hts_htmlcheck_loop)(struct_back* sback,int back_index,int lien_tot,int lien_ntot,int stat_time,hts_stat_struct* stats);
  279. typedef int   (* t_hts_htmlcheck_check)(char* adr,char* fil,int status);
  280. typedef int   (* t_hts_htmlcheck_check_mime)(char* adr,char* fil,char* mime,int status);
  281. typedef void  (* t_hts_htmlcheck_pause)(char* lockfile);
  282. typedef void  (* t_hts_htmlcheck_filesave)(char* file);
  283. typedef void  (* t_hts_htmlcheck_filesave2)(char* hostname,char* filename,char* localfile,int is_new,int is_modified, int not_updated);
  284. typedef int   (* t_hts_htmlcheck_linkdetected)(char* link);
  285. typedef int   (* t_hts_htmlcheck_linkdetected2)(char* link, char* tag_start);
  286. typedef int   (* t_hts_htmlcheck_xfrstatus)(lien_back* back);
  287. typedef int   (* t_hts_htmlcheck_savename)(char* adr_complete,char* fil_complete,char* referer_adr,char* referer_fil,char* save);
  288. typedef int   (* t_hts_htmlcheck_sendhead)(char* buff, char* adr, char* fil, char* referer_adr, char* referer_fil, htsblk* outgoing);
  289. typedef int   (* t_hts_htmlcheck_receivehead)(char* buff, char* adr, char* fil, char* referer_adr, char* referer_fil, htsblk* incoming);
  290. */
  291.  
  292. // demande d'interaction avec le shell
  293. #if HTS_ANALYSTE
  294. //char HTbuff[1024];
  295. /*
  296. extern t_hts_htmlcheck_init       hts_htmlcheck_init;
  297. extern t_hts_htmlcheck_uninit     hts_htmlcheck_uninit;
  298. extern t_hts_htmlcheck_start      hts_htmlcheck_start;
  299. extern t_hts_htmlcheck_end        hts_htmlcheck_end;
  300. extern t_hts_htmlcheck_chopt      hts_htmlcheck_chopt;
  301. extern t_hts_htmlcheck_process    hts_htmlcheck_preprocess;
  302. extern t_hts_htmlcheck_process    hts_htmlcheck_postprocess;
  303. extern t_hts_htmlcheck            hts_htmlcheck;
  304. extern t_hts_htmlcheck_query      hts_htmlcheck_query;
  305. extern t_hts_htmlcheck_query2     hts_htmlcheck_query2;
  306. extern t_hts_htmlcheck_query3     hts_htmlcheck_query3;
  307. extern t_hts_htmlcheck_loop       hts_htmlcheck_loop;
  308. extern t_hts_htmlcheck_check      hts_htmlcheck_check;
  309. extern t_hts_htmlcheck_check_mime hts_htmlcheck_check_mime;
  310. extern t_hts_htmlcheck_pause      hts_htmlcheck_pause;
  311. extern t_hts_htmlcheck_filesave   hts_htmlcheck_filesave;
  312. extern t_hts_htmlcheck_filesave2  hts_htmlcheck_filesave2;
  313. extern t_hts_htmlcheck_linkdetected hts_htmlcheck_linkdetected;
  314. extern t_hts_htmlcheck_linkdetected2 hts_htmlcheck_linkdetected2;
  315. extern t_hts_htmlcheck_xfrstatus  hts_htmlcheck_xfrstatus;
  316. extern t_hts_htmlcheck_savename   hts_htmlcheck_savename;
  317. extern t_hts_htmlcheck_sendhead   hts_htmlcheck_sendhead;
  318. extern t_hts_htmlcheck_receivehead hts_htmlcheck_receivehead;
  319. */
  320.  
  321. /* Library internal definictions */
  322. #ifdef HTS_INTERNAL_BYTECODE
  323.  
  324. //
  325. #ifndef HTTRACK_DEFLIB
  326. HTSEXT_API int hts_is_parsing(int flag);
  327. HTSEXT_API int hts_is_testing(void);
  328. HTSEXT_API int hts_is_exiting(void);
  329. HTSEXT_API int hts_setopt(httrackp* opt);
  330. HTSEXT_API int hts_addurl(char** url);
  331. HTSEXT_API int hts_resetaddurl(void);
  332. HTSEXT_API int copy_htsopt(httrackp* from,httrackp* to);
  333. HTSEXT_API char* hts_errmsg(void);
  334. HTSEXT_API int hts_setpause(int);      // pause transfer
  335. HTSEXT_API int hts_request_stop(int force);
  336. //
  337. HTSEXT_API char* hts_cancel_file(char * s);
  338. HTSEXT_API void hts_cancel_test(void);
  339. HTSEXT_API void hts_cancel_parsing(void);
  340. #endif
  341. //
  342. // Variables globales
  343. extern int _hts_in_html_parsing;
  344. extern int _hts_in_html_done;  // % rΘalisΘs
  345. extern int _hts_in_html_poll;  // parsing
  346. extern char _hts_errmsg[1100];
  347. extern int _hts_setpause;
  348. //extern httrackp* _hts_setopt;
  349. extern char** _hts_addurl;
  350. extern int _hts_cancel;
  351. #endif
  352.  
  353. //
  354.  
  355.  
  356. //int httpmirror(char* url,int level,httrackp opt);
  357. int httpmirror(char* url1,httrackp* opt);
  358. int filesave(httrackp* opt,char* adr,int len,char* s,char* url_adr /* = NULL */,char* url_fil /* = NULL */);
  359. int check_fatal_io_errno(void);
  360. int engine_stats(void);
  361. void host_ban(httrackp* opt,lien_url** liens,int ptr,int lien_tot,struct_back* sback,char* host);
  362. FILE* filecreate(char* s);
  363. FILE* fileappend(char* s);
  364. int filecreateempty(char* filename);
  365. int filenote(char* s,filecreate_params* params);
  366. void file_notify(char* adr,char* fil,char* save,int create,int modify,int wasupdated);
  367. HTS_INLINE void usercommand(httrackp* opt,int exe,char* cmd,char* file,char* adr,char* fil);
  368. void usercommand_exe(char* cmd,char* file);
  369. //void* structcheck_init(int init);
  370. int filters_init(char*** ptrfilters, int maxfilter, int filterinc);
  371. #ifndef HTTRACK_DEFLIB
  372. HTSEXT_API int structcheck(char* s);
  373. #endif
  374. HTS_INLINE int fspc(FILE* fp,char* type);
  375. char* next_token(char* p,int flag);
  376. //
  377. char* readfile(char* fil);
  378. char* readfile2(char* fil, LLint* size);
  379. char* readfile_or(char* fil,char* defaultdata);
  380. #if 0
  381. void check_rate(TStamp stat_timestart,int maxrate);
  382. #endif
  383.  
  384. // liens
  385. int liens_record(char* adr,char* fil,char* save,char* former_adr,char* former_fil,char* codebase);
  386.  
  387.  
  388. // backing, routines externes
  389. int back_pluggable_sockets(struct_back* sback, httrackp* opt);
  390. int back_pluggable_sockets_strict(struct_back* sback, httrackp* opt);
  391. int back_fill(struct_back* sback,httrackp* opt,cache_back* cache,lien_url** liens,int ptr,int numero_passe,int lien_tot);
  392. int backlinks_done(struct_back* sback,lien_url** liens,int lien_tot,int ptr);
  393. int back_fillmax(struct_back* sback,httrackp* opt,cache_back* cache,lien_url** liens,int ptr,int numero_passe,int lien_tot);
  394.  
  395. // cancel file
  396. #if HTS_ANALYSTE
  397. #ifndef HTTRACK_DEFLIB
  398. HTSEXT_API char* hts_cancel_file(char * s);
  399. HTSEXT_API void hts_cancel_test(void);
  400. HTSEXT_API void hts_cancel_parsing(void);
  401. #endif
  402. #endif
  403.  
  404. int ask_continue(void);
  405. int nombre_digit(int n);
  406.  
  407. // Java
  408. #if 0
  409. int hts_add_file(char* file,int file_position);
  410. #endif
  411.  
  412. // Polling
  413. #if HTS_POLL
  414. HTS_INLINE int check_flot(T_SOC s);
  415. HTS_INLINE int check_stdin(void);
  416. int read_stdin(char* s,int max);
  417. #endif
  418. HTS_INLINE int check_sockerror(T_SOC s);
  419. HTS_INLINE int check_sockdata(T_SOC s);
  420.  
  421. httrackp* hts_declareoptbuffer(httrackp* optdecl);
  422. void sig_finish( int code );     // finir et quitter
  423. void sig_term( int code );       // quitter
  424. #if HTS_WIN
  425. void sig_ask( int code );        // demander
  426. #else
  427. void sig_back( int code );       // ignorer et mettre en backing 
  428. void sig_ask( int code );        // demander
  429. void sig_ignore( int code );     // ignorer signal
  430. void sig_brpipe( int code );     // treat if necessary
  431. void sig_doback(int);            // mettre en arriΦre plan
  432. #endif
  433.  
  434. /* external modules */
  435. int htsAddLink(htsmoduleStruct* str, char* link);
  436.  
  437. // Void
  438. void voidf(void);
  439.  
  440. #define HTS_TOPINDEX "TOP_INDEX_HTTRACK"
  441.  
  442. #endif
  443.  
  444. #endif
  445.  
  446.  
  447.